#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>

int main()
{
    // 只读方式创建文件，设置权限0666
    // 但系统权限掩码是2，最终显示出的权限是0664
    //int fd = open("data.txt", O_CREAT | O_RDONLY, 0666);

    // 我们直接设置权限掩码为全0，最终权限也就是0666了
    umask(0);
    int fd = open("data.txt", O_CREAT | O_WRONLY | O_APPEND, 0666);

    if(fd < 0)
    {
        perror("open error!");
        return 1;
    }

    printf("%d\n", fd);

    const char *msg = "abc!\n";
    int cnt = 1;
    while(cnt)
    {
        // 二进制文本不要加'\0'，添加多余的\0会污染数据
        write(fd, msg, strlen(msg));
        cnt--;
    }



    close(fd);

    return 0;
}



//#define ONE 001
//#define TWO 002
//#define THREE 004
//
//void Func(int flags)
//{
//    if (flags & ONE) printf("flags is ONE! ");
//    if (flags & TWO) printf("flags is TWO! ");：
//    if (flags & THREE) printf("flags is THREE! ");
//    printf("\n");
//}
//
//int main()
//{
//    Func(ONE);
//    Func(ONE | TWO);
//    Func(ONE | TWO | THREE);
//    return 0;
//}


//int main(int argc, char* argv[])
//{
//    if (argc != 2) // 命令行参数为2才行哦！
//    {
//        printf("argc error!\n");
//        return 1;
//    }
//
//    FILE* fp = fopen(argv[1], "r"); // 打开命令行参数表
//    if (!fp)
//    {
//        printf("fopen error!\n");
//        return 2;
//    }
//
//    char buffer[128];
//
//    while (1)
//    {
//        int n = fread(buffer, 1, sizeof(buffer), fp); // 读取内容到buffer
//        if (n > 0)
//        {
//            buffer[n] = '\0';
//            printf("%s", buffer);
//        }
//
//        if (feof(fp)) break;
//    }
//    fclose(fp);
//
//    return 0;
//}


//#include<stdio.h>
//#include<string.h>
//
//int main()
//{
//    // 1.打开文件
//    FILE* fp1 = fopen("log.txt", "w");
//    if (fp1 == NULL)
//    {
//        perror("fopen");
//        return 1;
//    }
//    // 2.写文件
//    const char* msg = "hello";
//    int cnt = 1;
//    while (cnt <= 10)
//    {
//        char buffer[1024];
//        snprintf(buffer, sizeof(buffer), "%s: %d\n", msg, cnt++); // 格式化输出
//        fwrite(buffer, strlen(buffer), 1, fp1);
//    }
//    fclose(fp1);
//
//    // 3.读文件
//    FILE* fp2 = fopen("log.txt", "r");
//    if (fp2 == NULL)
//    {
//        perror("fopen");
//        return 1;
//    }
//    while (1)
//    {
//        char buf[1024];
//        int s = fread(buf, 1, sizeof(buf) - 1, fp2); // 把打开文件的内容读到buf数组里
//        if (s > 0)
//        {
//            buf[s] = '\0'; //末尾置为0
//            printf("%s", buf); // 输出显示器
//        }
//
//        if (feof(fp2)) break; // 判断文件读到结尾
//    }
//    fclose(fp2);
//
//    return 0;
//}
